package do

import "inspector/pkg/validation"

type WebhookEvent struct {
	EventType      string
	HookId         string
	WebhookPayload WebhookRequest
}

type WebhookRequest struct {
	validation.DefaultValidator
	After        string   `json:"after"`
	Before       string   `json:"before"`
	Commits      []Commit `json:"commits"`
	Compare      string   `json:"compare"`
	HeadCommit   Commit   `json:"head_commit"`
	Installation struct {
		ID int64 `json:"id"`
	} `json:"installation"`
	Organization struct {
		ID    string `json:"id"`
		Login string `json:"login"`
	} `json:"organization"`
	Ref        string     `json:"ref"`
	Repository Repository `json:"repository"`
	Sender     Sender     `json:"sender"`
}

type Commit struct {
	Added     []string `json:"added"`
	Author    User     `json:"author"`
	Committer User     `json:"committer"`
	Distinct  bool     `json:"distinct"`
	ID        string   `json:"id"`
	Message   string   `json:"message"`
	Modified  []string `json:"modified"`
	Removed   []string `json:"removed"`
	Timestamp string   `json:"timestamp"`
	TreeID    string   `json:"tree_id"`
	URL       string   `json:"url"`
}

type Repository struct {
	AllowForking    bool    `json:"allow_forking"`
	Archived        bool    `json:"archived"`
	CloneURL        string  `json:"clone_url"`
	CreatedAt       string  `json:"created_at"`
	DefaultBranch   string  `json:"default_branch"`
	Disabled        bool    `json:"disabled"`
	Fork            bool    `json:"fork"`
	Forks           int     `json:"forks"`
	ForksCount      int     `json:"forks_count"`
	FullName        string  `json:"full_name"`
	GitURL          string  `json:"git_url"`
	Homepage        string  `json:"homepage"`
	HTMLURL         string  `json:"html_url"`
	ID              int     `json:"id"`
	IsTemplate      bool    `json:"is_template"`
	MasterBranch    string  `json:"master_branch"`
	Name            string  `json:"name"`
	Organization    string  `json:"organization"`
	Owner           Owner   `json:"owner"`
	Private         bool    `json:"private"`
	Size            float64 `json:"size"`
	SSHURL          string  `json:"ssh_url"`
	StargazersCount int     `json:"stargazers_count"`
	UpdatedAt       string  `json:"updated_at"`
	URL             string  `json:"url"`
	Visibility      string  `json:"visibility"`
}

type User struct {
	Email    string `json:"email"`
	Name     string `json:"name"`
	Username string `json:"username"`
}

type Sender struct {
	AvatarURL string `json:"avatar_url"`
	HtmlURL   string `json:"html_url"`
	ID        string `json:"id"`
	Login     string `json:"login"`
	Type      string `json:"type"`
}

type Owner struct {
	HTMLURL string `json:"html_url"`
	ID      string `json:"id"`
	Name    string `json:"name"`
	Type    string `json:"type"`
}

type ScanRequestBody struct {
	UserId         string `json:"userId"`
	AppId          string `json:"appId"`
	AppName        string `json:"appName"`
	Organization   string `json:"organization"`
	OrganizationID string `json:"organizationId"`
	Repository     string `json:"repository"`
	RepositoryID   string `json:"repositoryId"`
	Branch         string `json:"branch"`
	CommitID       string `json:"commitId"`
	ScanID         string `json:"scanId"`
	ScanType       string `json:"scanType"`
	SenderID       string `json:"senderId"`
	SenderType     string `json:"senderType"`
}
